#include <stdlib.h>
#include <getch.h>
#include<string.h>
#include <student.h>
#include <user.h>
#include<dao.h>
#include<list.h>

List* user_list = NULL;

static void user_add(List* list)
{
	pf("\n%s\n\n",__func__);
	pf("请输入学生姓名 性别 学号: ");
	Student* stu = malloc(STU_SIZE);
	sf("%s %s %d",stu->name,stu->sex,&stu->id);
	add_tail_list(list,stu);
	any_key();
}

static void user_del(List* list)
{
	pf("\n%s\n\n",__func__);
	char name[20];
	printf("\n请输入要删除的姓名:");
	gets(name);
	int cmp(const void* ptr1,const void*ptr2)
	{
		const Student* stu = ptr1;
		const char* name = ptr2;
		return strcmp(stu->name,name);
	}
	printf("\n删除%s\n",del_value_list(list,name,cmp)?"成功":"失败");
	any_key();
}

static void user_chg(List* list)
{
	pf("\n%s\n\n",__func__);
	printf("\n请输入要修改的学号:\n");
	int id=0;
	scanf("%d",&id);	
	int cmp(const void* ptr1,const void* ptr2)
	{
		const Student* stu =ptr1;
		const int* id = ptr2;
		if(stu->id > *id)
			return 1;
		else if(stu->id <*id)
			return -1;
		else 
			return 0;
	}
	int index=find_list(user_list,&id,cmp);
	Node* node = list->head;
	for(int i=0;i<index;i++)
		node=node->next;
		Student* stu = node->ptr;
		printf("请输入修改后的姓名 性别 学号:\n");
		scanf("%s %s %d",stu->name,stu->sex,&stu->id);
		any_key();
}

static void user_find(List* list)
{
	pf("\n%s\n\n",__func__);
	printf("\n请输入要查找的学号:");
	int id=0;
	scanf("%u",&id);

	int cmp(const void* ptr1,const void* ptr2)
	{
		const Student* stu =ptr1;
		const int* id = ptr2;
		if(stu->id > *id)
			return 1;
		else if(stu->id <*id)
			return -1;
		else 
			return 0;
	}
	int index=find_list(list,&id,cmp);
	Node* node = list->head;
	for(int i=0;i<index;i++)
		node=node->next;
		Student* stu = node->ptr;	
		printf("%s %s %d\n",stu->name,stu->sex,stu->id);
		any_key();
}

static void user_sort(void)
{
	pf("\n%s\n\n",__func__);
	const Student* arr[user_list->size];
	size_t index = 0;
	void get_stu(const void* ptr)
	{
		arr[index++] = ptr;
	}
	show_list(user_list,get_stu);
	
	int cmp(const void* ptr1,const void* ptr2)
	{
		const Student* s1 = ptr1, * s2 = ptr2;
		if(s1->id > s2->id)
			return 1;
		else if(s1->id < s2->id)
			return -1;
		else	
			return 0;
	}
	
	quick_sort((void**)arr,index,cmp);
	
	for(int i=0; i<index; i++)
	{
		pf("%s %s %d\n",arr[i]->name,arr[i]->sex,arr[i]->id);
	}
	any_key();
}


static void user_menu(void)
{
	for(;;)
	{
		system("clear");
		pf("******学生信息管理******\n");
		pf("1、增加\n");
		pf("2、删除\n");
		pf("3、修改\n");
		pf("4、查找\n");
		pf("5、排序\n");
		pf("6、返回\n");
		
		switch(getch())
		{
			case '1': user_add(user_list); break;
			case '2': user_del(user_list); break;
			case '3': user_chg(user_list); break;
			case '4': user_find(user_list); break;
			case '5': user_sort(); break;
			case '6': return;
		}
	}
}

// 登录
State user_login()
{
	int i=0;
	char* user_id="user";
	char* user_psd="123456";
	char str_user[10]={};
	char psd_user[20]={};	
	while(1)
		{
		system("clear");
		printf("=========进入用户界面========\n");
		printf("\n请输入用户名： \n");
		scanf("%s",str_user);
		if(i == 3)
		{
			printf("用户名输入错误三次，退出登陆\n");
			any_key();
			return	NameError;
		}	
		if(strcmp(str_user,user_id)!=0)
		{
			printf("用户名错误，请重新输入\n");
			i++;
			any_key();
			continue;
			system("clear");	
		}
		if(strcmp(str_user,user_id)==0 && 3>i)
		{
			printf("\n请输入密码:\n");
			scanf("%s",psd_user);
			if(0==strcmp(psd_user,user_psd))
			{
				printf("登陆成功\n");
				i=0;
				break;
			}
			if(0!=strcmp(psd_user,user_psd))
			{
				i++;
				printf("密码错误，还有%d次机会\n",3-i);
				any_key();
				system("clear");
			}

		}
		else
			return PassError;
	}

	user_menu();
	return LoginOk;
}
